#pragma once
#include <iostream>
//using namespace std;
//using std::string;

class Screen
{
	public: typedef std::string::size_type pos;   //类型成员
	// 定义一个 pos 类型，然后用pos 这个类型 隐藏 Screen 的细节
	/*
		
	*/
	private: pos cursor = 0;pos height = 0, width = 0;std::string contents;
			
	public:Screen() = default;
	/*
		令成员作为内联函数  (翻第六章 6.5.2)	
	*/
	public:Screen(pos ht, pos wd, char c) :height(ht), width(wd), contents(ht * wd, c) {}
		   char get() const						// 读取光标处的字符
				{ return contents[cursor]; }		// 隐式内联  这里get 函数直接返回了
		   inline char get(pos ht, pos wd) const;     // 显示内联  这里需要在 cpp 内写函数内容，这两个算是重载
		   Screen &move(pos r, pos c);					// 能在之后被设为内联

	// 可变数据成员(即非常量 const)
	private:mutable rsize_t access_ctr; // 即使在一个 const 对象内也能被修改
	public:void some_member() const;

	// 返回 *this 的成员函数
	public:Screen &set(char);
	public:Screen &set(pos,pos,char);

	// 函数返回值是 const 的，还是没太明白 (从 const 成员函数返回 *this)
	public:Screen display() const;

	// 把Window_mgr 指定成友元，则 Window_mgr 可以访问 Screen 内的私有部分(朋友才能看私密东西是吧)
	friend class Window_mgr;

	// 令 Window_mgr内的 clear 才有访问私有的权限
	friend void Window_mgr::clear();
};

